www.gusucode.com > VC++ Flash(SWF)文件创建生成Lib库源码+demo-源码程序 > VC++ Flash(SWF)文件创建生成Lib库源码+demo-源码程序/code/SWFLIB_Library/SWFBitmap.cpp

    // SWFBitmap.cpp: implementation of the CSWFBitmap class.
//
//////////////////////////////////////////////////////////////////////

#include "SWFBitmap.h"


CSWFBitmap::CSWFBitmap(USHORT nID, UCHAR* filename)
{
	// Init members
	m_ObjectType = SWF_OBJECT_TYPE_BITMAP;
	m_SWFStream = NULL;
	m_SWFStreamLength = 0;
	m_ID = nID;
	m_DefineBits.Header.TagCodeAndLength = (21 << 6) | 0x003F;
	m_DefineBits.CharacterID = nID;

	FILE* image = fopen((char*)filename, "rb");
	if (image != NULL)
	{
		// Calculate DefineBitsJPEG2 tag size
		int fileLength = filelength(fileno(image));
		UCHAR* pBuffer = new UCHAR[fileLength];
		fread(pBuffer, 1, fileLength, image);

		m_DefineBits.Header.Length = fileLength + 8;
		m_SWFStreamLength = sizeof(SWF_DEFINE_BITS_JPEG2_TAG) + (m_DefineBits.Header.Length-2);

		m_SWFStream = (UCHAR*)malloc(m_SWFStreamLength*sizeof(UCHAR));
		memset(m_SWFStream, 0, m_SWFStreamLength);

		// Write header and data
		UCHAR JPEGEndFlag[2] = {0xFF, 0xD9};
		UCHAR JPEGStartFlag[2] = {0xFF, 0xD8};
		memcpy(m_SWFStream, &m_DefineBits, sizeof(SWF_DEFINE_BITS_JPEG2_TAG));
		memcpy(m_SWFStream+sizeof(SWF_DEFINE_BITS_JPEG2_TAG), &JPEGEndFlag, 2);
		memcpy(m_SWFStream+sizeof(SWF_DEFINE_BITS_JPEG2_TAG)+2, &JPEGStartFlag, 2);
		memcpy(m_SWFStream+sizeof(SWF_DEFINE_BITS_JPEG2_TAG)+4, pBuffer, fileLength);
		memcpy(m_SWFStream+sizeof(SWF_DEFINE_BITS_JPEG2_TAG)+4+fileLength, &JPEGEndFlag, 2);
		fclose(image);
		delete pBuffer;
	}
}

CSWFBitmap::~CSWFBitmap()
{
	if (m_SWFStream != NULL)
	{
		delete m_SWFStream;
		m_SWFStream = NULL;
	}
}

UCHAR* CSWFBitmap::BuildSWFStream()
{
	return m_SWFStream;
}

int CSWFBitmap::GetSWFStreamLength()
{
	return m_SWFStreamLength;
}